package core

import (
	"crypto/rand"
	"os"
)

const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

// 检测目标文件状态，如果不存在，不做处理，如果已存在，返回一个新的文件名称(旧名称+八位随机数)
func FileStatus(destPath string) (newDestPath string) {
	if fileExists(destPath) {
		newSuffix, _ := generateRandomString(8, charset)
		return destPath + newSuffix
	} else {
		return destPath
	}
}

// 生成指定长度的字符串
func generateRandomString(length int, charset string) (string, error) {
	b := make([]byte, length)
	_, err := rand.Read(b)
	if err != nil {
		return "", err
	}
	for i, v := range b {
		b[i] = charset[v%byte(len(charset))] // 选择字符集的字符
	}
	return string(b), nil
}

// 判断文件是否存在，不考虑复杂的文件权限问题。
func fileExists(filename string) bool {
	_, err := os.Stat(filename)
	if err == nil {
		return true
	}
	if os.IsNotExist(err) {
		return false
	}
	// 其他类型的错误（如权限问题）
	return false
}
